<?php

namespace App\Traits\Admin;

use App\Models\User;
use Illuminate\Support\Facades\View;
use Nwidart\Modules\Facades\Module;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

trait DashboardViewShareDataTrait
{
    protected function shareData()
    {
        // module 是模块名称，根据不同的模块生成不同的菜单。
        // 获取开放的模块
        $modules = [];
        if (!request()->hasHeader('HX-Request')) {
            // 根据模块生成不同的菜单 TODO 但是三方模块的菜单注册，还没想好
            $coreMenus = [
                [
                    'type' => 'groupName',
                    'name' => '主要功能',
                    'shortName' => '功能',
                ],
                [
                    'type' => 'menu',
                    'name' => '仪表盘',
                    'flag' => 'dashboard',
                    'icon' => 'material-symbols--home-outline-rounded', // 这里面就放入 iconify 的图标名称就可以了，后续的我们自动拼接
                    'url' => route('admin.dashboard'),
                ],
            ];
            if (auth()->user()->hasRole('administrator')) {
                // TODO 核心管理的部分菜单只给超级管理员看到，比如用户管理，菜单管理，模块管理等

            }
            if (
                auth()->user()->can('list', User::class)
                || auth()->user()->hasRole('administrator')
            ) {
                $coreMenus[] = [
                    'type' => 'menu',
                    'name' => '用户管理',
                    'flag' => 'user-list',
                    'icon' => 'material-symbols--home-speaker-outline', // 这里面就放入 iconify 的图标名称就可以了，后续的我们自动拼接
                    'url' => route('admin.user.list'),
                ];
            }

            if (auth()->user()->can('list', Permission::class)
                || auth()->user()->hasRole('administrator')) {
                $coreMenus[] = [
                    'type' => 'menu',
                    'name' => '权限管理',
                    'flag' => 'permission-list',
                    'icon' => 'material-symbols--home-speaker-outline', // 这里面就放入 iconify 的图标名称就可以了，后续的我们自动拼接
                    'url' => route('admin.permission.list'),
                ];
            }

            if (auth()->user()->can('list', Role::class)
                || auth()->user()->hasRole('administrator')) {
                $coreMenus[] = [
                    'type' => 'menu',
                    'name' => '角色管理',
                    'flag' => 'role-list',
                    'icon' => 'material-symbols--home-speaker-outline', // 这里面就放入 iconify 的图标名称就可以了，后续的我们自动拼接
                    'url' => route('admin.role.list'),
                ];
            }



            $modules['core'] = [
                'title' => '核心管理',
                'url' => route('admin.dashboard'),
            ];
            $modules['core']['menus'] = $coreMenus;
            // 获取所有模块
            $allModules = Module::allEnabled();
            foreach ($allModules as $module) {
                $moduleLowerName = strtolower($module->getName());
                $moduleMenus = app($moduleLowerName . '.menus');
                $modules[$moduleLowerName] = [
                    'title' => app($moduleLowerName . '.moduleTopMenuShowName'),
                    'url' => app($moduleLowerName . '.moduleTopMenuUrl'),
                    'menus' => $moduleMenus,
                ];
            }
        }
//        dd($modules);
        View::share('modules', $modules);
    }
}
